package com.xxzuibang.day6;

//数组的反转
public class Demo05 {
    public static void main(String[] args) {
        arr1();
        arr2();
        arr3();
        arr4();

    }

    private static void arr4() {
        //数组反转
        //1.定义一个静态初始数组arr1
        int[] arr1={6,7,8,9,10};
        //2.定义一个动态数组arr2长度和arr1相等，用于存放反转后的数组信息
        int[] arr2=new int[arr1.length];
        //3.逆序遍历arr1，每个元素赋值到arr2[j]里去
        for(int i=arr1.length-1,j=0;i>=0;i--,j++){
            arr2[j]=arr1[i];
        }
        //4.arr2赋给arr1，arr1原有数据销毁
        arr1=arr2;
        //5.遍历arr1，输出逆序后的数组信息
        System.out.print("[");
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(i==arr1.length-1?arr1[i]:arr1[i]+",");
        }
        System.out.println("]");
    }























    private static void arr3() {
        //数组的反转思路：
        //1.定义一个静态初始数组arr1
        int[] arr1={1,2,3,4,5};
        //2.定义一个动态数组arr2长度为arr1的长度，存放反转的数据
        int[] arr2=new int[arr1.length];
        //3.逆序遍历arr1,每个元素值赋值给arr2
        for (int i=arr1.length-1,j=0;i>=0;i--,j++) {
            arr2[j]=arr1[i];
        }
        //4.arr1指向arr2的数据空间(即把arr2赋给arr1)，这样arr1原来的数据空间就没有了变量引用，会被当做垃圾销毁
        arr1=arr2;
        //5.遍历arr1，输出反转后的数组信息
        System.out.println("\n反转后的信息如下：");
        System.out.print("[");
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(i==arr1.length-1?arr1[i]:arr1[i]+",");
        }
        System.out.println("]");


    }













    private static void arr2() {
        //逆序赋值的方法实现数组的反转
        int[] arr={11,22,33,44,55,66};
        /**
         * 1.创建了一个数组
         * 2.逆序遍历arr，将每个元素拷贝到新的arr2中，顺序拷贝
         * 3.增加一个循环变量，
         */
        int[] arr2=new int[arr.length];
        //逆序遍历arr
        for (int i = arr.length-1,j=0; i>=0; i--,j++) {
            arr2[j]=arr[i];
        }
        //当for循环结束，arr2就是一个逆序的数组
        //让arr指向arr2的数据空间，此时arr原来的数据空间就没有了变量引用，会被当做垃圾销毁
        arr=arr2;
        System.out.println("\narr的元素情况:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }




    private static void arr1() {
        //1.通过找规律实现反转
        int[] arr={11,22,33,44,55,66};
        /**
         * 规律：
         * 1.把arr[0]和arr[5]进行交换{66,22,33,44,55,11}
         * 2.把arr[1]和arr[4]进行交换{66,55,33,44,22,11}
         * 3.把arr[2]和arr[3]进行交换{66,55,44,33,22,11}
         * 4.一共交换了3次=arr.length/2
         * 5.每次交换时，对应的下标为arr[i]和arr[arr.length-1-i]
         */
        int temp=0;
        int len=arr.length;//计算数组的长度
        for (int i = 0; i < len/2; i++) {
            temp=arr[len-1-i];//保存
            arr[len-1-i]=arr[i];
            arr[i]=temp;
        }
        System.out.println("反转后的数组：");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}
